import storage from 'good-storage'
/**
 * @params arr<获取本地存储的音乐>, val<获取插入的值>, compare<比较函数，用于比较数组中有无当前歌曲
 *  maxLen<数组中保存歌曲的最大长度>
 * @decoration 插入歌曲
 * >
 */
function inertArray(arr, val, compare, maxLen) {
  const index = arr.findIndex(compare)
  if (index === 0) {
    return
  }
  // 比较时候有相同的则删除一个, 这样做的目的也是让列表显示在第一个
  if (index > 0) {
    arr.splice(index, 1)
  }
  // 头部插入
  arr.unshift(val)
  // 大于的时候删除
  if (maxLen && arr.length > maxLen) {
    arr.pop()
  }
}
/**
 * @params arr<被移除的数组某项>, compare<比较函数，用于比较数组中有无当前歌曲
 * @decoration 从收藏列表中移除某项
 * >
 */
function deleteFromArray(arr, compare) {
  const index = arr.findIndex(compare)
  if (index > -1) {
    arr.splice(index, 1)
  }
}
/**
 * @params item<插入元素>, key<存储本地的key值>, compare<比较函数，用于比较数组中有无当前歌曲
 *  maxLen<数组中保存歌曲的最大长度>
 * @decoration 在本地存储中收藏歌曲
 * >
 */
export function save(item, key, compare, maxLen) {
  const items = storage.get(key, [])
  inertArray(items, item, compare, maxLen)
  // 本地存储
  storage.set(key, items)
  return items
}
/**
 * @params key<存储本地的key值>, compare<比较函数，用于比较数组中有无当前歌曲
 * @decoration 在本地存储中移除歌曲
 * >
 */
export function remove(key, compare) {
  const items = storage.get(key, [])
  deleteFromArray(items, compare)
  // 本地存储
  storage.set(key, items)
  return items
}
/**
 * 加载本地得到的数据
 */
export function load(key) {
  return storage.get(key, [])
}

export function clear(key) {
  storage.remove(key)
  return []
}

export function saveAll(items, key) {
  storage.set(key, items)
}
